rule
	: id ':' altList ';' ;

block
    :   '(' altList ')' ebnfSuffix?
    ;	

altList
	: element ebnfSuffix? ('|' element ebnfSuffix?)* ;

ebnfSuffix
	:	'?'
  	|	'*'
   	|	'+'
	;

element
	: id
	| block
	| TERMINAL
	;
	
id	
	: TOKEN
	| RULE
	;

TERMINAL
	: '[^'\\]+'
	;

TOKEN
	: [A-Z]+
	;

RULE
	: [a-z]+
	;

WS	
	: ( |\t|\r?\n)+
	;

SL_COMMENT
	: //[^\r\n]*\r?\n
	;
	
ML_COMMENT
	: /\*.*\*/
	;